NexusPi Git Node
lib/microReticulum/src/Bytes.h copilot/add-rtnode-configuration-options (9529fa8a) Text, 14.42 KB
Tff7b72#Tff7b72pragma once
Tff7b72#Tff7b72include T8b949e"Log.h"
Tff7b72#Tff7b72include T8b949e<ArduinoJson.h>
Tff7b72#Tff7b72include T8b949e<stdint.h>
Tff7b72#Tff7b72include T8b949e<stddef.h>
Tff7b72#Tff7b72include T8b949e<string.h>
Tff7b72#Tff7b72include T8b949e<stdlib.h>
Tff7b72#Tff7b72include T8b949e<vector>
Tff7b72#Tff7b72include T8b949e<string>
Tff7b72#Tff7b72include T8b949e<memory>
T8b949e// Finds the start of the first occurrence of the substring needle of length needlelen in the memory area haystack of length haystacklen.
Tff7b72inline Tffa657voidTff7b72* Td2a8ffmemmemTb4b4b4(Tff7b72const Tffa657voidTff7b72* Te6edf3haystackTb4b4b4, Tffa657size_t Te6edf3haystack_lenTb4b4b4, Tff7b72const Tffa657voidTff7b72* Te6edf3needleTb4b4b4, Tffa657size_t Te6edf3needle_lenTb4b4b4) Tb4b4b4{
Tff7b72const Tffa657unsigned Tffa657charTff7b72* Te6edf3h Tff7b72= Tb4b4b4(Tff7b72const Tffa657unsigned Tffa657charTff7b72*Tb4b4b4)Te6edf3haystackTb4b4b4;
Tff7b72const Tffa657unsigned Tffa657charTff7b72* Te6edf3n Tff7b72= Tb4b4b4(Tff7b72const Tffa657unsigned Tffa657charTff7b72*Tb4b4b4)Te6edf3needleTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3needle_len Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72return Tb4b4b4(Tffa657voidTff7b72*Tb4b4b4)Te6edf3hTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3haystack_len Tff7b72< Te6edf3needle_lenTb4b4b4)
Tff7b72return Tffa657nullptrTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657size_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72<Tff7b72= Te6edf3haystack_len Tff7b72- Te6edf3needle_lenTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= Te6edf3nTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72&Tff7b72& Te6edf3memcmpTb4b4b4(Tff7b72&Te6edf3hTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3nTb4b4b4, Te6edf3needle_lenTb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Tffa657voidTff7b72*Tb4b4b4)Tff7b72&Te6edf3hTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657nullptrTb4b4b4;
Tb4b4b4}
Te6edf3namespace Te6edf3RNS Tb4b4b4{
Tff7b72#Tff7b72define COW
Te6edf3class Te6edf3Bytes Tb4b4b4{
Te6edf3privateTff7b72:
T8b949e//typedef std::vector<uint8_t> Data;
Te6edf3using Te6edf3Data Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3vectorTff7b72<Tffa657uint8_tTff7b72>Tb4b4b4;
T8b949e//typedef std::shared_ptr<Data> SharedData;
Te6edf3using Te6edf3SharedData Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3shared_ptrTff7b72<Te6edf3DataTff7b72>Tb4b4b4;
Te6edf3publicTff7b72:
Tff7b72enum Te6edf3NoneConstructor Tb4b4b4{
Te6edf3NONE
Tb4b4b4}Tb4b4b4;
Te6edf3publicTff7b72:
Te6edf3BytesTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from default, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tff7b72const Te6edf3NoneConstructor Te6edf3noneTb4b4b4) Tb4b4b4{
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from NONE, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{
T8b949e//MEM("Bytes is using shared data");
Te6edf3assignTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object copy created from bytes Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Construct from std::vector<uint8_t>
Te6edf3BytesTb4b4b4(Tff7b72const Te6edf3DataTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffCreating from data-copy...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3assignTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from data-copy Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Construct from rvalue std::vector<uint8_t> (move)
Te6edf3BytesTb4b4b4(Te6edf3DataTff7b72&Tff7b72& Te6edf3rdataTb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffCreating from data-move...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3assignTb4b4b4(Te6edf3stdTff7b72:Tff7b72:Te6edf3moveTb4b4b4(Te6edf3rdataTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from data-move Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3chunkTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4) Tb4b4b4{
Te6edf3assignTb4b4b4(Te6edf3chunkTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from chunk Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tff7b72const Tffa657voidTff7b72* Te6edf3chunkTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4) Tb4b4b4{
Te6edf3assignTb4b4b4(Te6edf3chunkTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from chunk Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3stringTb4b4b4) Tb4b4b4{
Te6edf3assignTb4b4b4(Te6edf3stringTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from string Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTff7b72& Te6edf3stringTb4b4b4) Tb4b4b4{
Te6edf3assignTb4b4b4(Te6edf3stringTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created from std::string Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3BytesTb4b4b4(Tffa657size_t Te6edf3capacityTb4b4b4) Tb4b4b4{
Te6edf3newDataTb4b4b4(Te6edf3capacityTb4b4b4)Tb4b4b4;
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object created with capacity %u, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3capacityTb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tff7b72~Te6edf3BytesTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3MEMFTb4b4b4(Ta5d6ff"Ta5d6ffBytes object destroyed Tffea00\"Ta5d6ff%sTffea00\"Ta5d6ff, this: %lu, data: %luTa5d6ff"Tb4b4b4, Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3thisTb4b4b4, Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Te6edf3operator Tff7b72= Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{
Te6edf3assignTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72*Te6edf3thisTb4b4b4;
Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Te6edf3operator Tff7b72+Tff7b72= Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{
Te6edf3appendTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72*Te6edf3thisTb4b4b4;
Tb4b4b4}
T8b949e// CBA TODO Resolve ambiguity in JsonVariantConst assignments before enabling the following
T8b949e/*
// Assignment from std::vector<uint8_t>
inline const Bytes& operator = (const Data& data) {
assign(data);
return *this;
}
// Move assignment from std::vector<uint8_t>
inline const Bytes& operator = (Data&& rdata) {
assign(std::move(rdata));
return *this;
}
*/
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Te6edf3operator Tff7b72+Tff7b72= Tb4b4b4(Tff7b72const Te6edf3DataTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
Te6edf3appendTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72*Te6edf3thisTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3Bytes Te6edf3operator Tff7b72+ Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3Bytes Td2a8ffnewbytesTb4b4b4(Tff7b72*Te6edf3thisTb4b4b4)Tb4b4b4;
Te6edf3newbytesTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3newbytesTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3operator Tff7b72=Tff7b72= Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3compareTb4b4b4(Te6edf3bytesTb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3operator Tff7b72!Tff7b72= Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3compareTb4b4b4(Te6edf3bytesTb4b4b4) Tff7b72!Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3operator Tff7b72< Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3compareTb4b4b4(Te6edf3bytesTb4b4b4) Tff7b72< T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3operator Tff7b72> Tb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3compareTb4b4b4(Te6edf3bytesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657uint8_tTff7b72& Te6edf3operatorTb4b4b4[Tb4b4b4]Tb4b4b4(Tffa657size_t Te6edf3indexTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_data Tff7b72|Tff7b72| Te6edf3index Tff7b72>Tff7b72= Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3out_of_rangeTb4b4b4(Ta5d6ff"Ta5d6ffIndex out of boundsTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4(Tff7b72*Te6edf3_dataTb4b4b4)Tb4b4b4[Te6edf3indexTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tff7b72const Tffa657uint8_tTff7b72& Te6edf3operatorTb4b4b4[Tb4b4b4]Tb4b4b4(Tffa657size_t Te6edf3indexTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_data Tff7b72|Tff7b72| Te6edf3index Tff7b72>Tff7b72= Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3out_of_rangeTb4b4b4(Ta5d6ff"Ta5d6ffIndex out of boundsTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4(Tff7b72*Te6edf3_dataTb4b4b4)Tb4b4b4[Te6edf3indexTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3operator Tffa657boolTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Tb4b4b4(Te6edf3_data Tff7b72&Tff7b72& Tff7b72!Te6edf3_dataTff7b72-Tff7b72>Te6edf3emptyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3operator Tff7b72const Te6edf3DataTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4)
Tff7b72return Te6edf3DataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72*Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// CBA NOTE: Following cast operators can cause issues with ambiguity from other libraries
T8b949e/*
inline operator const uint8_t*() const {
if (!_data)
return nullptr;
return _data->data();
}
inline operator const void*() const {
if (!_data)
return nullptr;
return _data->data();
}
*/
Te6edf3privateTff7b72:
Tff7b72inline Te6edf3SharedData Te6edf3shareDataTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
T8b949e//MEM("Bytes is sharing its own data");
Te6edf3_exclusive Tff7b72= Tffa657falseTb4b4b4;
Tff7b72return Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3newDataTb4b4b4(Tffa657size_t Te6edf3capacity Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexclusiveDataTb4b4b4(Tffa657bool Te6edf3copy Tff7b72= Tffa657trueTb4b4b4, Tffa657size_t Te6edf3capacity Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3publicTff7b72:
Tff7b72inline Tffa657void Te6edf3clearTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_data Tff7b72= Tffa657nullptrTb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72ifdef COW
Te6edf3_data Tff7b72= Te6edf3bytesTb4b4b4.Te6edf3shareDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657falseTb4b4b4;
Tff7b72#Tff7b72else
T8b949e// if assignment is empty then clear data and don't bother creating new
Tff7b72if Tb4b4b4(Te6edf3bytesTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_data Tff7b72= Tffa657nullptrTb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4, Te6edf3bytesTb4b4b4.Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e//_data->insert(_data->begin(), bytes._data->begin(), bytes._data->end());
T8b949e//_data->assign(bytes._data->begin(), bytes._data->end());
Tff7b72*Te6edf3_data Tff7b72= Te6edf3bytesTb4b4b4.Te6edf3_dataTb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Tff7b72const Te6edf3DataTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
T8b949e// if assignment is empty then clear data and don't bother creating new
Tff7b72if Tb4b4b4(Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_data Tff7b72= Tffa657nullptrTb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4, Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e//_data->assign(data.begin(), data.end());
Tff7b72*Te6edf3_data Tff7b72= Te6edf3dataTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Te6edf3DataTff7b72&Tff7b72& Te6edf3rdataTb4b4b4) Tb4b4b4{
T8b949e// if assignment is empty then clear data and don't bother creating new
Tff7b72if Tb4b4b4(Te6edf3rdataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_data Tff7b72= Tffa657nullptrTb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4;
Tff7b72*Te6edf3_data Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3moveTb4b4b4(Te6edf3rdataTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3chunkTb4b4b4, Tffa657size_t Te6edf3chunk_sizeTb4b4b4) Tb4b4b4{
T8b949e// if assignment is empty then clear data and don't bother creating new
Tff7b72if Tb4b4b4(Te6edf3chunk Tff7b72=Tff7b72= Tffa657nullptr Tff7b72|Tff7b72| Te6edf3chunk_size Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_data Tff7b72= Tffa657nullptrTb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4, Te6edf3chunk_sizeTb4b4b4)Tb4b4b4;
T8b949e//_data->insert(_data->begin(), chunk, chunk + chunk_size);
Te6edf3_dataTff7b72-Tff7b72>Te6edf3assignTb4b4b4(Te6edf3chunkTb4b4b4, Te6edf3chunk Tff7b72+ Te6edf3chunk_sizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Tff7b72const Tffa657voidTff7b72* Te6edf3chunkTb4b4b4, Tffa657size_t Te6edf3chunk_sizeTb4b4b4) Tb4b4b4{
Te6edf3assignTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3chunkTb4b4b4, Te6edf3chunk_sizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3stringTb4b4b4) Tb4b4b4{
T8b949e// if assignment is empty then clear data and don't bother creating new
Tff7b72if Tb4b4b4(Te6edf3string Tff7b72=Tff7b72= Tffa657nullptr Tff7b72|Tff7b72| Te6edf3stringTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_data Tff7b72= Tffa657nullptrTb4b4b4;
Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657size_t Te6edf3string_size Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3stringTb4b4b4)Tb4b4b4;
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4, Te6edf3string_sizeTb4b4b4)Tb4b4b4;
T8b949e//_data->insert(_data->begin(), (uint8_t* )string, (uint8_t* )string + string_size);
Te6edf3_dataTff7b72-Tff7b72>Te6edf3assignTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72* Tb4b4b4)Te6edf3stringTb4b4b4, Tb4b4b4(Tffa657uint8_tTff7b72* Tb4b4b4)Te6edf3string Tff7b72+ Te6edf3string_sizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e//inline void assign(const std::string& string) { assign(string.c_str()); }
Tff7b72inline Tffa657void Te6edf3assignTb4b4b4(Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTff7b72& Te6edf3stringTb4b4b4) Tb4b4b4{ Te6edf3assignTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3stringTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stringTb4b4b4.Te6edf3lengthTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Te6edf3assignHexTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3hexTb4b4b4, Tffa657size_t Te6edf3hex_sizeTb4b4b4)Tb4b4b4;
Tff7b72inline Tffa657void Td2a8ffassignHexTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3hexTb4b4b4) Tb4b4b4{ Te6edf3assignHexTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3hexTb4b4b4, Te6edf3strlenTb4b4b4(Te6edf3hexTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{
T8b949e// if append is empty then do nothing
Tff7b72if Tb4b4b4(Te6edf3bytesTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657trueTb4b4b4, Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3bytesTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3_dataTff7b72-Tff7b72>Te6edf3insertTb4b4b4(Te6edf3_dataTff7b72-Tff7b72>Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3bytesTb4b4b4.Te6edf3_dataTff7b72-Tff7b72>Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3bytesTb4b4b4.Te6edf3_dataTff7b72-Tff7b72>Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tff7b72const Te6edf3DataTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
T8b949e// if append is empty then do nothing
Tff7b72if Tb4b4b4(Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657trueTb4b4b4, Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3_dataTff7b72-Tff7b72>Te6edf3insertTb4b4b4(Te6edf3_dataTff7b72-Tff7b72>Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3dataTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3dataTb4b4b4.Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3chunkTb4b4b4, Tffa657size_t Te6edf3chunk_sizeTb4b4b4) Tb4b4b4{
T8b949e// if append is empty then do nothing
Tff7b72if Tb4b4b4(Te6edf3chunk Tff7b72=Tff7b72= Tffa657nullptr Tff7b72|Tff7b72| Te6edf3chunk_size Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3exclusiveDataTb4b4b4(Tffa657trueTb4b4b4, Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3chunk_sizeTb4b4b4)Tb4b4b4;
Te6edf3_dataTff7b72-Tff7b72>Te6edf3insertTb4b4b4(Te6edf3_dataTff7b72-Tff7b72>Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3chunkTb4b4b4, Te6edf3chunk Tff7b72+ Te6edf3chunk_sizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tff7b72const Tffa657voidTff7b72* Te6edf3chunkTb4b4b4, Tffa657size_t Te6edf3chunk_sizeTb4b4b4) Tb4b4b4{
Te6edf3appendTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3chunkTb4b4b4, Te6edf3chunk_sizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3stringTb4b4b4) Tb4b4b4{
T8b949e// if append is empty then do nothing
Tff7b72if Tb4b4b4(Te6edf3string Tff7b72=Tff7b72= Tffa657nullptr Tff7b72|Tff7b72| Te6edf3stringTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657size_t Te6edf3string_size Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3stringTb4b4b4)Tb4b4b4;
Te6edf3exclusiveDataTb4b4b4(Tffa657trueTb4b4b4, Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3string_sizeTb4b4b4)Tb4b4b4;
Te6edf3_dataTff7b72-Tff7b72>Te6edf3insertTb4b4b4(Te6edf3_dataTff7b72-Tff7b72>Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Tffa657uint8_tTff7b72* Tb4b4b4)Te6edf3stringTb4b4b4, Tb4b4b4(Tffa657uint8_tTff7b72* Tb4b4b4)Te6edf3string Tff7b72+ Te6edf3string_sizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4) Tb4b4b4{
Te6edf3exclusiveDataTb4b4b4(Tffa657trueTb4b4b4, Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3_dataTff7b72-Tff7b72>Te6edf3push_backTb4b4b4(Te6edf3byteTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e//inline void append(const std::string& string) { append(string.c_str()); }
Tff7b72inline Tffa657void Td2a8ffappendTb4b4b4(Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTff7b72& Te6edf3stringTb4b4b4) Tb4b4b4{ Te6edf3appendTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3stringTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stringTb4b4b4.Te6edf3lengthTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffappendHexTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3hexTb4b4b4, Tffa657size_t Te6edf3hex_sizeTb4b4b4)Tb4b4b4;
Tff7b72inline Tffa657void Td2a8ffappendHexTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3hexTb4b4b4) Tb4b4b4{ Te6edf3appendHexTb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3hexTb4b4b4, Te6edf3strlenTb4b4b4(Te6edf3hexTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657uint8_tTff7b72* Td2a8ffwritableTb4b4b4(Tffa657size_t Te6edf3sizeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
T8b949e// create exclusive data with reserved capacity
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4;
T8b949e// actually expand data to requested size
Te6edf3resizeTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3_dataTff7b72-Tff7b72>Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_dataTb4b4b4) Tb4b4b4{
Tffa657size_t Te6edf3current_size Tff7b72= Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// create exclusive data with reserved capacity
Te6edf3exclusiveDataTb4b4b4(Tffa657falseTb4b4b4, Te6edf3current_sizeTb4b4b4)Tb4b4b4;
T8b949e// actually expand data to current size
Te6edf3resizeTb4b4b4(Te6edf3current_sizeTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3_dataTff7b72-Tff7b72>Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657nullptrTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffresizeTb4b4b4(Tffa657size_t Te6edf3newsizeTb4b4b4) Tb4b4b4{
T8b949e// if size is unchanged then do nothing
Tff7b72if Tb4b4b4(Te6edf3newsize Tff7b72=Tff7b72= Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// CBA TODO Determine whether or not to reserve capacity here since when size is shrunk the call to
T8b949e// exclusive data may copy all data firt which will effectively grow the data again before being
T8b949e// shrunk below (inefficient).
Te6edf3exclusiveDataTb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3_dataTff7b72-Tff7b72>Te6edf3resizeTb4b4b4(Te6edf3newsizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3publicTff7b72:
Tffa657int Te6edf3compareTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tff7b72constTb4b4b4;
Tffa657int Td2a8ffcompareTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3bufTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4) Tff7b72constTb4b4b4;
Tff7b72inline Tffa657int Td2a8ffcompareTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3compareTb4b4b4(Tb4b4b4(Tff7b72const Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3strTb4b4b4, Te6edf3strlenTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657size_t Td2a8ffsizeTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return T79c0ff0Tb4b4b4; Tff7b72return Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffemptyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return Tffa657trueTb4b4b4; Tff7b72return Te6edf3_dataTff7b72-Tff7b72>Te6edf3emptyTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657size_t Td2a8ffcapacityTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return T79c0ff0Tb4b4b4; Tff7b72return Te6edf3_dataTff7b72-Tff7b72>Te6edf3capacityTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffreserveTb4b4b4(Tffa657size_t Te6edf3capacityTb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72returnTb4b4b4; Te6edf3_dataTff7b72-Tff7b72>Te6edf3reserveTb4b4b4(Te6edf3capacityTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Tffa657uint8_tTff7b72* Td2a8ffdataTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return Tffa657nullptrTb4b4b4; Tff7b72return Te6edf3_dataTff7b72-Tff7b72>Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3Data Td2a8ffcollectionTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return Te6edf3DataTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72return Tff7b72*Te6edf3_dataTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8fftoStringTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return Ta5d6ff"Ta5d6ff"Tb4b4b4; Tff7b72return Tb4b4b4{Tb4b4b4(Tff7b72const Tffa657charTff7b72*Tb4b4b4)Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4}Tb4b4b4; Tb4b4b4}
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8fftoHexTb4b4b4(Tffa657bool Te6edf3upper Tff7b72= Tffa657falseTb4b4b4) Tff7b72constTb4b4b4;
Te6edf3Bytes Td2a8ffmidTb4b4b4(Tffa657size_t Te6edf3beginposTb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4) Tff7b72constTb4b4b4;
Te6edf3Bytes Td2a8ffmidTb4b4b4(Tffa657size_t Te6edf3beginposTb4b4b4) Tff7b72constTb4b4b4;
Tff7b72inline Te6edf3Bytes Td2a8ffleftTb4b4b4(Tffa657size_t Te6edf3lenTb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return Te6edf3NONETb4b4b4; Tff7b72if Tb4b4b4(Te6edf3len Tff7b72> Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3len Tff7b72= Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72return Tb4b4b4{Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3lenTb4b4b4}Tb4b4b4; Tb4b4b4}
Tff7b72inline Te6edf3Bytes Td2a8ffrightTb4b4b4(Tffa657size_t Te6edf3lenTb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dataTb4b4b4) Tff7b72return Te6edf3NONETb4b4b4; Tff7b72if Tb4b4b4(Te6edf3len Tff7b72> Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3len Tff7b72= Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72return Tb4b4b4{Te6edf3dataTb4b4b4(Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3lenTb4b4b4)Tb4b4b4, Te6edf3lenTb4b4b4}Tb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657int Td2a8fffindTb4b4b4(Tffa657int Te6edf3posTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_data Tff7b72|Tff7b72| Te6edf3_dataTff7b72-Tff7b72>Te6edf3dataTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Tffa657nullptr Tff7b72|Tff7b72| Tb4b4b4(Tffa657size_tTb4b4b4)Te6edf3pos Tff7b72>Tff7b72= Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return T79c0ff-1Tb4b4b4;
Tb4b4b4}
T8b949e//const char* ptr = strnstr((const char*)(_data->data() + pos), str, (_data->size() - pos));
Tffa657voidTff7b72* Te6edf3ptr Tff7b72= Te6edf3memmemTb4b4b4(Tb4b4b4(Tff7b72const Tffa657voidTff7b72*Tb4b4b4)Tb4b4b4(Te6edf3_dataTff7b72-Tff7b72>Te6edf3dataTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3posTb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3_dataTff7b72-Tff7b72>Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3posTb4b4b4)Tb4b4b4, Tb4b4b4(Tff7b72const Tffa657voidTff7b72*Tb4b4b4)Te6edf3strTb4b4b4, Te6edf3strlenTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ptr Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
Tff7b72return T79c0ff-1Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4(Tffa657intTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3ptr Tff7b72- Te6edf3_dataTff7b72-Tff7b72>Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657int Td2a8fffindTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3findTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3strTb4b4b4)Tb4b4b4; Tb4b4b4}
T8b949e// Python array indexing
T8b949e// [8:16]
T8b949e// pos 8 to pos 16
T8b949e// mid(8, 8)
T8b949e// [:16]
T8b949e// start to pos 16 (same as first 16)
T8b949e// left(16)
T8b949e// [16:]
T8b949e// pos 16 to end
T8b949e// mid(16)
T8b949e// [-16:]
T8b949e// last 16
T8b949e// right(16)
T8b949e// [:-16]
T8b949e// all except the last 16
T8b949e// left(size()-16)
T8b949e// mid(0, size()-16)
T8b949e// [-1]
T8b949e// last element
T8b949e// [-2]
T8b949e// second to last element
Te6edf3privateTff7b72:
Te6edf3SharedData Te6edf3_dataTb4b4b4;
Te6edf3mutable Tffa657bool Te6edf3_exclusive Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}Tb4b4b4;
T8b949e// following array function doesn't work without size since it's passed as a pointer to the array so sizeof() is of the pointer
T8b949e//inline Bytes bytesFromArray(const uint8_t arr[]) { return Bytes(arr, sizeof(arr)); }
T8b949e//inline Bytes bytesFromChunk(const uint8_t* ptr, size_t len) { return Bytes(ptr, len); }
Tff7b72inline Te6edf3Bytes Td2a8ffbytesFromChunkTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3ptrTb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4) Tb4b4b4{ Tff7b72return Tb4b4b4{Te6edf3ptrTb4b4b4, Te6edf3lenTb4b4b4}Tb4b4b4; Tb4b4b4}
T8b949e//inline Bytes bytesFromString(const char* str) { return Bytes((uint8_t*)str, strlen(str)); }
Tff7b72inline Te6edf3Bytes Td2a8ffbytesFromStringTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{ Tff7b72return Tb4b4b4{Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Te6edf3strTb4b4b4, Te6edf3strlenTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4}Tb4b4b4; Tb4b4b4}
T8b949e//z inline Bytes bytesFromInt(const int) { return {(uint8_t*)str, strlen(str)}; }
Tff7b72inline Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8ffstringFromBytesTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3bytesTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72inline Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8ffhexFromBytesTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3bytesTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3bytesTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8ffhexFromByteTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4, Tffa657bool Te6edf3upper Tff7b72= Tffa657trueTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3operator Tff7b72<Tff7b72< Tb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3lhbytesTb4b4b4, Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3rhbytesTb4b4b4) Tb4b4b4{
T8b949e//MEM("Appending right-hand Bytes to left-hand Bytes");
Te6edf3lhbytesTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3rhbytesTb4b4b4)Tb4b4b4;
T8b949e//MEM("Returning left-hand Bytes");
Tff7b72return Te6edf3lhbytesTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3operator Tff7b72<Tff7b72< Tb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3lhbytesTb4b4b4, Tffa657uint8_t Te6edf3rhbyteTb4b4b4) Tb4b4b4{
T8b949e//MEM("Appending right-hand byte to left-hand Bytes");
Te6edf3lhbytesTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3rhbyteTb4b4b4)Tb4b4b4;
T8b949e//MEM("Returning left-hand Bytes");
Tff7b72return Te6edf3lhbytesTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3operator Tff7b72<Tff7b72< Tb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3lhbytesTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3rhstrTb4b4b4) Tb4b4b4{
T8b949e//MEM("Appending right-hand str to left-hand Bytes");
Te6edf3lhbytesTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3rhstrTb4b4b4)Tb4b4b4;
T8b949e//MEM("Returning left-hand Bytes");
Tff7b72return Te6edf3lhbytesTb4b4b4;
Tb4b4b4}
Te6edf3namespace Te6edf3ArduinoJson Tb4b4b4{
T8b949e// Serialize
Tff7b72inline Tffa657bool Td2a8ffconvertToJsonTb4b4b4(Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3srcTb4b4b4, Te6edf3JsonVariant Te6edf3dstTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3dstTb4b4b4.Te6edf3setTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Deserialize
Tff7b72inline Tffa657void Td2a8ffconvertFromJsonTb4b4b4(Te6edf3JsonVariantConst Te6edf3srcTb4b4b4, Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72& Te6edf3dstTb4b4b4) Tb4b4b4{
Tff7b72const Tffa657charTff7b72* Te6edf3hex Tff7b72= Te6edf3srcTb4b4b4.Te6edf3asTff7b72<Tff7b72const Tffa657charTff7b72*Tff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hex Tff7b72!Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
Te6edf3dstTb4b4b4.Te6edf3assignHexTb4b4b4(Te6edf3hexTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffcanConvertFromJsonTb4b4b4(Te6edf3JsonVariantConst Te6edf3srcTb4b4b4, Tff7b72const Te6edf3RNSTff7b72:Tff7b72:Te6edf3BytesTff7b72&Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3srcTb4b4b4.Te6edf3isTff7b72<Tff7b72const Tffa657charTff7b72*Tff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.4.2 - Generated in 0.05s